// #include <cstdlib>
// #include <iostream>
// 
// using namespace std;
// 
// typedef struct _TNode {
// 	int adjSize;
// 	int adj[100];
// } TNode;
// 
// int n, m;
// TNode nodes[100];
// bool mark[100][100];
// bool visit[100];
// bool visitOnce[100];
// int color[100];
// int maxB = -1;
// int curB = 0;
// int maxColor[100];
// int totalNode;
// int visitNum;
// 
// void search(int x, bool isAdjB=false) {
// 	int restNode = totalNode - visitNum;
// 	if (restNode + curB <= maxB) return;
// 	visitOnce[x] = true;
// 	if (visit[x]) return;
// 	visit[x] = true;
// 	++visitNum;
// 	bool onlyWhite = false;
// 
// 	if (isAdjB) {
// 		onlyWhite = true;
// 	}
// 	else {
// 		for (int i=0; i<nodes[x].adjSize; ++i)
// 			if (color[nodes[x].adj[i]] == 'b') {
// 				color[x] = 'w';
// 				onlyWhite = true;
// 				break;
// 			}
// 	}
// 
// 	if (!onlyWhite) {
// 		color[x] = 'b';
// 		++curB;
// 		if (curB > maxB) {
// 			maxB = curB;
// 			for (int i=0; i<n; ++i)
// 				if (color[i] == 'b')
// 					maxColor[i] = 'b';
// 		}
// 		for (int i=0; i<nodes[x].adjSize; ++i)
// 			if (!visit[nodes[x].adj[i]])
// 				search(nodes[x].adj[i], true);
// 		color[x] = 0;
// 		--curB;
// 	}
// 	color[x] = 'w';
// 	for (int i=0; i<nodes[x].adjSize; ++i)
// 		if (!visit[nodes[x].adj[i]])
// 			search(nodes[x].adj[i]);
// 	visit[x] = false;
// 	--visitNum;
// 	color[x] = 0;
// }
// 
// void findTotalNode(int x) {
// 	if (visit[x]) return;
// 	++totalNode;
// 	visit[x] = true;
// 	for (int i=0; i<nodes[x].adjSize; ++i)
// 		findTotalNode(nodes[x].adj[i]);
// }
// 
// int main(void)
// {
// 	int totTestcase;
// 	cin >> totTestcase;
// 	for (int testcase = 0; testcase < totTestcase; ++testcase) {
// 		cin >> n >> m;
// 		for (int i=0; i<100; ++i)
// 			nodes[i].adjSize = 0;
// 		for (int i=0; i<m; ++i) {
// 			int a, b;
// 			cin >> a >> b;
// 			--a;--b;
// 			nodes[a].adj[nodes[a].adjSize++] = b;
// 			nodes[b].adj[nodes[b].adjSize++] = a;
// 		}
// 		memset(visitOnce, 0, 100);
// 		memset(maxColor, 0, 100*sizeof(int));
// 		for (int i=0; i<n; ++i)
// 			if (!visitOnce[i]) {
// 				memset(visit, 0, 100);
// 				totalNode = 0;
// 				findTotalNode(i);
// 				memset(visit, 0, 100);
// 				memset(color, 0, 100*sizeof(int));
// 				maxB = -1;
// 				visitNum = 0;
// 				search(i);
// 			}
// 			maxB = 0;
// 			for (int i=0; i<n; ++i)
// 				if (maxColor[i] == 'b') ++maxB;
// 			if (testcase>0) cout << endl;
// 			cout << maxB << endl;
// 			bool firstBlood = true;
// 			for (int i=0; i<n; ++i)
// 				if (maxColor[i] == 'b') {
// 					if (firstBlood) {
// 						cout << (i+1);
// 						firstBlood = false;
// 					} else
// 						cout << " " << (i+1);
// 				}
// 	}
// 	return 0;
// }